/**
 * 函数内变量没有var关键字，调用函数后，可以作为全局变量（不推荐）
 */

function text() {
    me = 'hi'
}
text()
console.log(me);//hi

/***
 * 使用var关键字会提升变量到函数顶部
 */

function foo() {
    console.log(age);
    var age = 18
}
foo()//undefined
//不报错，说明声明了变量，并未成功赋值


/**
 * let是块作用域(代码块中)，var是函数作用域
 */
if (true) {
    var name = 'abc';
    console.log(name);//abc
}
console.log(name);//abc

if (true) {
    let name2 = 'efg';
    console.log(name2);//efg
}
//console.log(name2);//报错

/**
 * let在块作用域中不允许重复声明，let声明的变量不会在作用域中被提升
 */

/**
 * let在作用域中不会成为window对象的属性，var会
 * 
 */

/***
 * const 一般用来声明常量和对象，与let基本相同，必须声明和赋值同时，不能修改，是块作用域，对于对象、数组的内部元素修改是合法的。
 */


/***================ */
/**   变量声明的实践： 不使用var，优先使用const，let次之   */